home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / graphics / chs_ultd.lzh / CHS_ULTD.500 / SOURCE / XCOMMON.H < prev   
C/C++ Source or Header  |  1992-09-25  |  11KB  |  410 lines

  1. #include <gem.h>
  2. #include <stdio.h>
  3.  
  4. #ifdef COLOR
  5. #define MAX_X        639
  6. #define MAX_Y        199
  7. #define LAST_COL    15
  8. #else
  9. #define MAX_X        639
  10. #define MAX_Y        399
  11. #define LAST_COL    4
  12. #endif
  13.  
  14. #define UNPACKED        0
  15. #define UNPACKABLE        1
  16. #define PACKED            2
  17.  
  18. #define S_SMALL        0
  19. #define S_MID            1
  20. #define S_BIG            2
  21. #define NO_SIZE        3
  22.  
  23. typedef struct {
  24.     unsigned    compare    : 2; /* 0 And     1 Or   2 Xor */
  25.     unsigned    wait     : 1; /* 1 warten auf taste  0 zeit */
  26.     unsigned    richtung    : 1; /* 0 vorwärts        1 vor und zurück */
  27.     unsigned    repeat    : 1; /* 0 einmal        1 wiederholt */
  28. } AO_FLAGS;
  29.  
  30. typedef struct {
  31.     AO_FLAGS    flags;
  32.     unsigned    wait_pic;
  33.     unsigned    wait_end;
  34. } SHOW_OPTS;
  35.  
  36. typedef struct {
  37.     unsigned    dummy    : 1;    /* war mal kompakt/stad */
  38.     unsigned    pic_type    : 2; /* 0 doodle    1 degas    2 stad        3 snapshot */
  39.     unsigned    block    : 1; /* 0 maus     0 fadenkreuz */
  40.     unsigned    gong     : 1; /* 0 aus        1 ein */
  41.     unsigned    save     : 1; /* 0 aus        1 ein */
  42.     unsigned    save_war    : 1; /* 0 aus        1 ein */
  43.     unsigned    abbruch    : 1; /* 0 aus        1 ein */
  44.     unsigned    delete    : 2; /* 0 nie        1 neu    2 mehrere 3 immer */
  45.     unsigned    quit     : 2; /* 0 nie        1 neu    3 immer */
  46.     unsigned    hc_size    : 2; /* 0 klein    1 groß    2 quer    3 doppel */
  47.     unsigned    hc_leer    : 1; /* 0 nicht drucken 1 drucken */
  48.     unsigned    hc_text    : 1; /* 0 nicht drucken 1 drucken */
  49.     unsigned    hc_abst    : 1; /* 0 aus        1 ein */
  50.     unsigned    hc_ff    : 8; /* bilder bis formfeed */
  51.     unsigned    d_tos    : 1; /* 0 eigene pr_out    1 tos pr_out */
  52.     unsigned  pack        : 1;    /* 0 bilder nicht packen  1 bilder packen */
  53. #ifndef COLOR
  54.     unsigned    col_flag    : 1; /* 0 normal    1 invers */
  55. #endif
  56. } FR_FLAGS;
  57.  
  58. #ifdef COLOR
  59. typedef struct {
  60.     unsigned    speed    : 16;
  61.     unsigned    first    : 4;
  62.     unsigned    last     : 4;
  63.     unsigned    dir        : 1; /* 0 links    1 rechts */
  64. } CYCLE_OPT;
  65. #endif
  66.  
  67. typedef struct
  68. {
  69.     FR_FLAGS    flags;
  70.     char     path[40];
  71.     char     ext;
  72.     int        dummy;
  73.     long     mem_rest;
  74.     SHOW_OPTS show;
  75.     char     d_code[8][10];
  76.     char     d_rand[9];
  77. #ifdef COLOR
  78.     int        col_tab[16];        /* farbtabelle für desktop, mid_rez */
  79.     CYCLE_OPT cycle;
  80.     int        col_tabs[12][16];
  81. #endif
  82. } CHS_SET;
  83.  
  84. typedef struct
  85. {
  86.     long len;
  87.     long *mother;
  88.     char data[];
  89. } PARAMETER;
  90.  
  91. typedef struct
  92. {
  93.     long len;
  94.     long *mother;
  95.     long data[];
  96. } PIC_DATA;
  97.  
  98. typedef struct
  99. {
  100.     int        nr;            /* nummer */
  101.     int        flag;        /* 0 film  1 pic  2... fractale */
  102.     int        objc_flag;
  103.     int        objc_state;
  104.     int        icon_type;    /* flag + 256 für checked */
  105.     char        name[10];
  106.     char        path[40];
  107.     char        ext[4];
  108.     char        pic_packed;    /* UNPACKED, UNPACKABLE, PACKED */
  109.     char        size;        /* 0 small  1 mid      2 big */
  110.     PIC_DATA  *pic_data;
  111.     long     pic_len;
  112.     PIC_DATA    *x_data;
  113.     int        lastline;
  114.     int       xor_offset;
  115.     PARAMETER    *par;
  116. #ifndef COLOR
  117.     int       color;
  118. #else
  119.     int        col_tab[16];
  120. #endif
  121. } FR_OBJC;
  122.  
  123. /* ------------------------------------------------------------- */
  124.  
  125. /*    bei parametereingabe anzugebende parameter                */
  126. /* ------------------------------------------------------------- */
  127. typedef struct
  128. {
  129.     int anzahl;
  130.     int size;
  131. #ifndef COLOR
  132.     int color;
  133. #else
  134.     int col_tab[16];
  135. #endif
  136.     int xor_offset;
  137.     char name[16];
  138.     char path[64];
  139. } X_PARAM;
  140.  
  141. typedef struct        /* für info anzeigen */
  142. {
  143.     int        anz;
  144.     double    points;
  145.     double    time;
  146.     double    iter;
  147. } PIC_INFO;
  148.  
  149. typedef struct
  150. {
  151.     int size;
  152. #ifndef COLOR
  153.     int color;
  154. #else
  155.     int col_tab[16];
  156. #endif
  157.     int xor_offset;
  158.     int lastline;
  159. } L_PARAM;                /* für load */
  160.  
  161. typedef struct
  162. {
  163.     char id[8];        /* kennung der routine,
  164.                         gedacht:    4 zeichen für autor
  165.                                 4 zeichen für routine */
  166.  
  167.     char *menue;        /* menüeintrag
  168.                         max. 16 zeichen */
  169.     char *name;        /* name des autors für programm-info anzeigen
  170.                         max. 24 zeichen */
  171.     char *version;        /* versionsnummer (und datum) der routine
  172.                         max. 20 zeichen */
  173.     char *text;        /* allg. beschreibung oder sonst. kommentar
  174.                         max. 64 zeichen */
  175.  
  176.     ICONBLK *icon;        /* zeiger auf icon für nicht gespeicherte */
  177.     ICONBLK *xicon;    /*                    und gespeicherte bilder */
  178.  
  179.     long set_len;        /* länge der voreinstellungen */
  180.     void *set;        /* zeiger auf speicherbereich für für voreinstellungen,
  181.                         muß routine bereitstellen! */
  182.  
  183.     long par_len;        /* länge der bild-parameter */
  184.  
  185.     long make_len;        /* länge der eingabeparameter für make bild(er) */
  186.     long neu_len;        /* länge für parameter bei make_neu */
  187.     void *neu_par;        /* zeiger auf make_neu-parameter, 
  188.                         von make_neu-routine zu setzen */
  189.     int neu_flag;        /* flag für make neu:
  190.                         0 not set, 1 neu ok, -1 nicht neu (abbruch in dialog) */
  191.  
  192.     int last_flag;        /* ==1 -> lastline (>0) entspricht ber. graph. zeilen
  193.                        ==0 -> immer ganzen screen speichern */
  194.  
  195.         /* routinen */
  196.  
  197.     int (*do_init)(int nr);
  198.                 /*
  199.                     initialisiere routinen (zB. resourcen laden etc.)
  200.                     nr: nummer des fractal-types
  201.                     returns     0 -> ok
  202.                             1 -> fehler
  203.                 */
  204.  
  205.     int (*get_param)(void *param,X_PARAM *x_param);
  206.                 /*    parameter für bild(er) eingeben
  207.                         param: bildparameter
  208.                         x_param: allg. parameter (größe, name...)
  209.                         RETURNS: 0/1 für abbruch/ok
  210.                 */
  211.  
  212.     void *(*get_picpar)(void *param_in,int nr,int anzahl);
  213.                 /* aus bild(er)parameter bildparameter machen
  214.                         param_in: bildparameter (wie in get_param)
  215.                         nr:        nummer des akt. bildes
  216.                         anzahl:    anzahl der bilder insg.
  217.                         RETURNS:    zeiger auf einzelbildparam.
  218.                 */
  219.  
  220.     void (*set_param)(void);
  221.                 /* OPT */
  222.                 /*    parameter voreinstellen
  223.                         (aufruf von menü mit shift)
  224.                 */
  225.  
  226.     void (*extended)(void);
  227.                 /* OPT */
  228.                 /*    aufruf vom menü aus mit control
  229.                 */
  230.  
  231.     int (*get_neu_param)(void *param);
  232.                 /* OPT */
  233.                 /*    parameter für 'neu berechnen' eingeben
  234.                         param: zeiger auf speicher für parameter
  235.                         
  236.                         routine muß neu_par und neu_flag setzen
  237.                 */
  238.  
  239.     void *(*make_neu_param)(FR_OBJC *objc,void *param,X_PARAM *x_par,int *change,int *redraw,int *size);
  240.                 /* OPT */
  241.                 /*
  242.                     aus parametern für 'neu berechnen' und
  243.                     bildparameter neue bildparameter erzeugen
  244.                     und zurückgeben
  245.  
  246.                     change,size und return
  247.                 */
  248.  
  249.     void (*make_vier)(FR_OBJC *in,void *out,int nr);
  250.                 /* OPT */
  251.                 /*    erzeuge aus bildparametern parameter für vier bilder
  252.                         in: zeiger auf input-object
  253.                         out: zeiger auf parameter des outputs
  254.                         nr: nummer des neuen bildes (0-3)
  255.                 */
  256.  
  257.     int (*do_draw)(FR_OBJC *object,void *param,void *puffer);
  258.                 /* bild berechnen
  259.                         object:    zielobject
  260.                         param:    parameter
  261.                         puffer:    freier puffer (32k)
  262.                         RETURNS:    abbruchzustand
  263.                 */
  264.     void (*dont_draw)(FR_OBJC *object,void *param);
  265.  
  266.     int (*show_par)(FR_OBJC *object,long *buf);
  267.                 /* OPT */
  268.                 /*     zeige parameter an
  269.                         return: 0 nichts geändert, 1 param. mögl. geändert */
  270.  
  271.     void (*show_info)(FR_OBJC *object,long *buf);
  272.                 /* OPT */
  273.                 /*     zeige bildinfo an 
  274.                 */
  275.  
  276.     void (*get_info)(FR_OBJC *object,PIC_INFO *info);
  277.                 /* OPT */
  278.                 /*    gebe bildinformationen zurück
  279.                 */
  280.  
  281.     void (*get_objcblk)(FR_OBJC *object,double *x_min,double *x_max,double *y_min,double *y_max);
  282.                 /* OPT */
  283.                 /*     koordinaten des bildrechteckes zurückgeben
  284.                     existenz der routine bedeutet auch, daß bild koordinatenstruktur hat
  285.                         object    object
  286.                         x_min,x_max,y_min,y_max
  287.                 */
  288.  
  289.     void (*get_xobjcblk)(FR_OBJC *object,double *x_min,double *x_max,double *y_min,double *y_max);
  290.                 /* OPT */
  291.                 /*    koordinaten des bildrechteckes zurückgeben
  292.                         object    object
  293.                         x_min,x_max,y_min,y_max
  294.  
  295.                 */
  296.     void (*get_pkt)(FR_OBJC *object,double *x,double *y);
  297.                 /* OPT */
  298.                 /*    gebe konstante zurück, 
  299.                     nur sinnvoll wenn auch get_objcblk */
  300.  
  301.     void (*show_pktinfo)(FR_OBJC *object,int x,int y,long *scr,long *buf);
  302.                 /* OPT */
  303.                 /*    zeige punktinfo für (raster)koordinaten x,y */
  304.                 /*        scr: aktueller bildschirm */
  305.                 /*        buf:    32k puffer zum sichern des bildschirms */
  306.  
  307.     void (*dr_param)(FR_OBJC *objc);
  308.                 /* OPT */
  309.                 /*    drucke parameter eines bildes unter hardcopy */
  310.  
  311.     int (*cnv_load)(int frac_typ,L_PARAM *par,PIC_DATA *xparam,PIC_DATA *param,PIC_DATA **x_par);
  312.                 /* OPT */
  313.                 /*    konvertiere parameter!, anpassen: offset, farben, 
  314.                                     parameter von xparam nach param kopieren (und anpassen)
  315.                                     x_par